package homework.jdbc.dao;

import homework.jdbc.domain.User;

import java.sql.*;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by Administrator on 2017/9/13.
 */
//操作User表
public class UserDao {
    /**
     * 查询
     */
    public List<User> findAll(){//测试方法：装插件JunitGeneration,alt+insert;
        //获得数据库连接
        Connection conn=JDBCUtils.getConnection();//conn在JDBCUtils里面关
        //创建一个集合，用于将对象添加进去
        List<User> list=new ArrayList<>();
        // 将变量定义在try...catch外边
        ResultSet result=null;
        Statement statement=null;
        //以下执行
        try {
            statement=conn.createStatement();
            String sql="select*from user1";
            result=statement.executeQuery(sql);
            while(result.next()){
                User user=new User();
                user.setId(result.getInt(1));//或者 user.setId(result.getInt(“id”));
                user.setUsername(result.getString(2));
                user.setPassword(result.getString(3));

                list.add(user);
            }
            return list;
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {//关闭资源！！
            if(result !=null){
                try {
                    result.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if(statement !=null){
                try {
                    statement.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if(conn!=null){
                JDBCUtils.close();
            }
        }
        return null;
    }
    public boolean insert(User user){
        Connection conn=JDBCUtils.getConnection();
        String sql="insert into user1(id,username,password) values(?,?,?)";
        PreparedStatement ps=null;
        try {
            ps=conn.prepareStatement(sql);
            ps.setInt(1,user.getId());
            ps.setString(2,user.getUsername());
            ps.setString(3,user.getPassword());
            int num=ps.executeUpdate();
            if(num==1){
                return true;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            if(ps !=null){
                try {
                    ps.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if(conn !=null){
                JDBCUtils.close();
            }

        }
        return false;
    }
    public boolean update(User user){
        Connection conn=JDBCUtils.getConnection();
        String sql="update user1 set username=?,password=? where id=?";
        PreparedStatement ps=null;
        try {
            ps=conn.prepareStatement(sql);
            ps.setString(1,user.getUsername());
            ps.setString(2,user.getPassword());
            ps.setInt(3,user.getId());//这里的顺序是按照update中设置的顺序
            ps.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            if(ps !=null){
                try {
                    ps.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if(conn !=null){
                JDBCUtils.close();
            }

        }
        return false;
    }
    public boolean delete(int id){
        Connection conn=JDBCUtils.getConnection();
        PreparedStatement ps=null;
        String sql="delete from user1 where id=?";
        try {
            ps=conn.prepareStatement(sql);
            ps.setInt(1,id);
            ps.executeUpdate();

        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            if(ps !=null){
                try {
                    ps.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if(conn!=null){
                JDBCUtils.close();
            }
        }
        return false;
    }
    public User findById(int id){
        //获得数据库连接
        Connection conn=JDBCUtils.getConnection();//conn在JDBCUtils里面关
        //创建一个集合，用于将对象添加进去

        // 将变量定义在try...catch外边
        ResultSet result=null;
        /**Statement statement=null;//只能处理固态的*/
        //使用预编译的preparedStatement  预处理，动态的
        PreparedStatement ps=null;
        //以下执行
        try {
           /** statement=conn.createStatement();*/
            String sql="select*from user1 where id=?";//编写sql语句 ？占位符
            //sql语句交给ps进行预处理
            ps=conn.prepareStatement(sql);
            //设置sql语句的参数
            ps.setInt(1,id);

            /**String sql="select*from user1 where id=2";
            result=statement.executeQuery(sql);*/

            //执行查询
            result =ps.executeQuery();//因为已经将SQL传进去了

            //处理结果 （以下两种方法实现过程一样）
            while(result.next()){
                User user=new User();
                user.setId(result.getInt(1));//或者 user.setId(result.getInt(“id”));
                user.setUsername(result.getString(2));
                user.setPassword(result.getString(3));
                return user;

            }
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {//关闭资源！！
            if(result !=null){
                try {
                    result.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if(/*statement*/ps !=null){
                try {
                    /*statement*/ps.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if(conn!=null){
                JDBCUtils.close();
            }
        }
        return null;
    }

}
